home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 16 / Computer Interactive cdrom 16 - dic 98.iso / zdnetit / content / CLASSBLD.ZIP / Include / CB_CriticalUniqueValueTreeOwned.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-06  |  5.3 KB  |  151 lines

  1. #ifndef CB_CRITICAL_UNIQUEVALUETREE_OWNED_H
  2. #define CB_CRITICAL_UNIQUEVALUETREE_OWNED_H
  3.  
  4. #include "CB_CriticalUniqueValueTree.h"
  5. #include "CB_UniqueValueTreeOwned.h"
  6.  
  7. // defines for include files
  8. #define RELATION_CRITICAL_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  9. private:\
  10.     ClassTo* _first##NameTo;\
  11.     int _count##NameTo;\
  12. \
  13. public:\
  14.     static CriticalSection _criticalSection##NameTo;\
  15. \
  16. protected:\
  17. \
  18. public:\
  19.     void Add##NameTo(ClassTo* item);\
  20.     void Remove##NameTo(ClassTo* item);\
  21.     void DeleteAll##NameTo();\
  22.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  23.     ClassTo* GetFirst##NameTo();\
  24.     ClassTo* GetLast##NameTo();\
  25.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  26.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  27.     int Get##NameTo##Count();\
  28.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  29.  
  30. #define RELATION_NOFILTER_CRITICAL_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  31. private:\
  32.     ClassTo* _first##NameTo;\
  33.     int _count##NameTo;\
  34. \
  35. public:\
  36.     static CriticalSection _criticalSection##NameTo;\
  37. \
  38. protected:\
  39. \
  40. public:\
  41.     void Add##NameTo(ClassTo* item);\
  42.     void Remove##NameTo(ClassTo* item);\
  43.     void DeleteAll##NameTo();\
  44.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  45.     ClassTo* GetFirst##NameTo();\
  46.     ClassTo* GetLast##NameTo();\
  47.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  48.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  49.     int Get##NameTo##Count();\
  50.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  51.  
  52. #define RELATION_CRITICAL_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  53.     RELATION_CRITICAL_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  54.  
  55. // defines implementation
  56. #define INIT_CRITICAL_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  57. {\
  58.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  59.     INIT_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  60. }
  61.  
  62. #define EXIT_CRITICAL_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  63. {\
  64.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  65.     EXIT_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  66. }
  67.  
  68. #define REPLACE_CRITICAL_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  69. {\
  70.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  71.     REPLACE_UNIQUEVALUETREE_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  72. }
  73.  
  74. #define INIT_CRITICAL_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  75. {\
  76.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  77.     INIT_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  78. }
  79.  
  80. #define EXIT_CRITICAL_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  81. {\
  82.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  83.     EXIT_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  84. }
  85.  
  86. #define REPLACE_CRITICAL_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  87. {\
  88.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  89.     REPLACE_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  90. }
  91.  
  92. #define METHODS_CRITICAL_UNIQUEVALUETREE_OWNED_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  93.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  94. void ClassFrom##::Add##NameTo(ClassTo* item)\
  95. {\
  96.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  97.     METHOD_UNIQUEVALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  98. }\
  99. \
  100. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  101. {\
  102.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  103.     METHOD_UNIQUEVALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  104. }\
  105. \
  106. void ClassFrom##::DeleteAll##NameTo()\
  107. {\
  108.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  109.     METHOD_UNIQUEVALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  110. }\
  111. \
  112. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  113. {\
  114.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  115.     METHOD_UNIQUEVALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  116. }\
  117. \
  118. ClassTo* ClassFrom##::GetFirst##NameTo()\
  119. {\
  120.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  121.     METHOD_UNIQUEVALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  122. }\
  123. \
  124. ClassTo* ClassFrom##::GetLast##NameTo()\
  125. {\
  126.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  127.     METHOD_UNIQUEVALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  128. }\
  129. \
  130. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos)\
  131. {\
  132.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  133.     METHOD_UNIQUEVALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  134. }\
  135. \
  136. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos)\
  137. {\
  138.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  139.     METHOD_UNIQUEVALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  140. }\
  141. \
  142. int ClassFrom##::Get##NameTo##Count()\
  143. {\
  144.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  145.     METHOD_UNIQUEVALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  146. }
  147.  
  148. #define METHODS_CRITICAL_UNIQUEVALUETREE_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  149.  
  150. #endif
  151.